// 娱乐城系统接口定义文件

import { GameType, BetType, CurrencyType, ChibiSide } from "../entities";

// 通用响应接口
export interface CasinoResponse<T = any> {
  act_id: number; // 指令ID
  code: number; // 状态码：0-成功，-1-失败，8-业务错误
  msg?: string; // 错误信息
  data?: T; // 响应数据
  list?: T[]; // 列表数据
  page?: number; // 当前页码
  sum?: number; // 总数量
}

// 分页参数接口
export interface PaginationParams {
  pageNum: number; // 页码（从0开始）
  pageSize?: number; // 每页大小（可选，默认20）
}

// 排行榜数据接口
export interface RankingData {
  name: string; // 用户名
  record?: number; // 记录金额
  title?: string; // 称号
  userid: number; // 用户ID
  money?: number; // 赚取金额
  wintime?: number; // 获胜次数
}

// 大小玩法相关接口

export interface DiceBetData {
  userId: number; // 用户ID
  characterId: number; // 角色ID
  betType: BetType; // 下注类型
  betAmount: number; // 下注金额
  currencyType: CurrencyType; // 货币类型
}

export interface DiceResult {
  num1: number; // 第一个数字
  num2: number; // 第二个数字
  num3: number; // 第三个数字
  sum: number; // 三个数字之和
  isBig: boolean; // 是否为大
  isOdd: boolean; // 是否为单
  isTriple: boolean; // 是否为豹子
}

export interface DiceGameInfo {
  id: number; // 期数ID
  list: any[]; // 下注列表
  m: number; // 当前期数
  prenum1: number; // 上期数字1
  prenum2: number; // 上期数字2
  prenum3: number; // 上期数字3
  presumgold: number; // 上期金币总额
  presumsliver: number; // 上期银币总额
  second: number; // 倒计时秒数
  state: number; // 状态
  sumbaozigold: number; // 豹子金币总额
  sumbaozisliver: number; // 豹子银币总额
  sumdagold: number; // 大金币总额
  sumdangold: number; // 单金币总额
  sumdansliver: number; // 单银币总额
  sumdasliver: number; // 大银币总额
  sumonepairgold: number; // 对子金币总额
  sumonepairsliver: number; // 对子银币总额
  sumshuanggold: number; // 双金币总额
  sumshuangsliver: number; // 双银币总额
  sumxiaogold: number; // 小金币总额
  sumxiaosliver: number; // 小银币总额
  time: string; // 时间
}

// 赤壁玩法相关接口

export interface ChibiBetData {
  userId: number; // 用户ID
  characterId: number; // 角色ID
  side: ChibiSide; // 支援国家
  betGold: number; // 金币下注
  betSilver: number; // 银币下注
}

export interface ChibiResult {
  winningSide: ChibiSide; // 获胜国家
  sideStats: Record<ChibiSide, number>; // 各国下注统计
  reportStr: string; // 战报描述
}

export interface ChibiGameInfo {
  curRndNum: number; // 当前期数
  list: Array<{
    gold: number; // 金币下注
    side: ChibiSide; // 国家
    sliver: number; // 银币下注
  }>;
  preSide: ChibiSide; // 上期获胜国家
  reportStr: string; // 战报描述
  second: number; // 倒计时秒数
}

// 猜拳玩法相关接口

export interface RPSChallengeData {
  challengerId: number; // 发起者用户ID
  challengerName: string; // 发起者名称
  challengerValue: number; // 发起者出拳
  betAmount: number; // 下注金额
  currencyType: CurrencyType; // 货币类型
}

export interface RPSResponseData {
  challengeId: number; // 挑战ID
  responderId: number; // 应战者用户ID
  responderName: string; // 应战者名称
  responderValue: number; // 应战者出拳
}

export interface RPSResult {
  winnerId: number; // 获胜者用户ID
  winAmount: number; // 获胜金额
  isDraw: boolean; // 是否平局
}

// 下注验证接口

export interface BetValidationRules {
  dice: {
    minGold: number; // 最小金币下注
    maxGold: number; // 最大金币下注
    minSilver: number; // 最小银币下注
  };
  chibi: {
    minGold: number; // 最小金币下注
    minSilver: number; // 最小银币下注
  };
  rockPaperScissors: {
    minGold: number; // 最小金币下注
    maxGold: number; // 最大金币下注
    minSilver: number; // 最小银币下注
  };
}

// 开奖广播接口

export interface CasinoBroadcastMessage {
  act_id: number; // 指令ID
  code: number; // 状态码
  data: {
    c: string; // 开奖结果描述
    h: string; // 开奖时间
    id: number; // 消息ID
    n: string; // 发送者名称
    rid: number; // 发送者角色ID
    t: number; // 消息类型
  };
}

// 大小玩法开奖结果接口 - 使用act_id: 1337
export interface DiceBroadcastMessage extends CasinoBroadcastMessage {
  act_id: 1337; // 大小开奖专用指令ID
  data: {
    c: string; // 大小玩法开奖结果描述
    h: string;
    id: number;
    n: string;
    rid: number;
    t: number;
  };
}

// 赤壁玩法开奖结果接口 - 使用act_id: 260
export interface ChibiBroadcastMessage extends CasinoBroadcastMessage {
  act_id: 260; // 赤壁开奖专用指令ID
  data: {
    c: string; // 赤壁玩法开奖结果描述
    h: string;
    id: number;
    n: string;
    rid: number;
    t: number;
  };
}

// 期数管理接口

export interface RoundCreationData {
  gameType: GameType; // 游戏类型
  startTime: Date; // 开始时间
  endTime: Date; // 结束时间
}

export interface RoundStatusUpdate {
  roundId: number; // 期数ID
  status: number; // 新状态
  resultData?: any; // 结果数据
}

// 用户余额接口

export interface UserBalance {
  userId: number; // 用户ID
  gold: number; // 金币余额
  silver: number; // 银币余额
}

export interface BalanceUpdate {
  userId: number; // 用户ID
  goldChange: number; // 金币变化
  silverChange: number; // 银币变化
  reason: string; // 变化原因
}

// 系统配置接口

export interface SystemConfig {
  key: string; // 配置键
  value: string | number | boolean; // 配置值
  description?: string; // 配置描述
}

export interface CasinoConfigData {
  diceRoundDuration: number; // 大小玩法每期时长
  chibiRoundDuration: number; // 赤壁玩法每期时长
  diceMinBetGold: number; // 大小玩法最小金币下注
  diceMaxBetGold: number; // 大小玩法最大金币下注
  diceMinBetSilver: number; // 大小玩法最小银币下注
  chibiMinBetGold: number; // 赤壁玩法最小金币下注
  chibiMinBetSilver: number; // 赤壁玩法最小银币下注
  rpsMinBetGold: number; // 猜拳玩法最小金币下注
  rpsMaxBetGold: number; // 猜拳玩法最大金币下注
  rpsMinBetSilver: number; // 猜拳玩法最小银币下注
  systemMaintenance: boolean; // 系统维护状态
  casinoEnabled: boolean; // 娱乐城启用状态
}
